#include "timer.h"
#include <unistd.h>
#include <iostream>

using namespace zsylar;

void func(int i) 
{
    std::cout << "i: " << i << std::endl;
}

int main()
{
    // 创建一个TimerManager对象，用于管理定时器
    std::shared_ptr<TimerManager> manager(new TimerManager());
    // 存储超时回调函数的容器
    std::vector<std::function<void()>> cbs;

    // 测试listExpiredCb超时功能
    {
        // 添加10个定时器，每个定时器的超时时间分别是1s，2s, ..., 10s
        for (int i = 0; i < 10; i++)
        {
            manager->addTimer((i + 1) * 1000, std::bind(&func, i), false);
        }
        std::cout << "所有定时器已设置完成" << std::endl;

        sleep(5);

        manager->listExpiredCb(cbs);
        while (!cbs.empty())
        {
            std::function<void()> cb = *cbs.begin();
            cbs.erase(cbs.begin());
            cb();
        }   

        // 再次等待5秒后，获取所有已超时的回调函数并执行
		sleep(5);
		manager->listExpiredCb(cbs);
		while(!cbs.empty())
		{
			std::function<void()> cb = *cbs.begin();
			cbs.erase(cbs.begin());
			cb();
		}
    }

    // 测试循环定时器
    {
        manager->addTimer(1000, std::bind(&func, 1000), true);
        int j = 10;
        while (j-- > 0)
        {
            sleep(1);
            manager->listExpiredCb(cbs);
            if (!cbs.empty())
            {
                std::function<void()> cb = *cbs.begin();
                cbs.erase(cbs.begin());
                cb();
            }
        }
    }
    return 0;
}